home *** CD-ROM | disk | FTP | other *** search
/ Macademic for Students & Teachers / Macademic for Students and Teachers (Quantum Leap)(1992).iso / Fun & Games / AdventureMaker / AdventureMaker Docs.txt < prev    next >
Encoding:
Text File  |  1988-09-23  |  61.4 KB  |  1,210 lines  |  [TEXT/QED1]

  1.  
  2.                                Welcome to AdventureMaker
  3.                                            Version 1.0
  4.                             Copyright 1988,  Paticia B. Smith
  5.  
  6. AdventureMaker is free for your own pleasure and use.  However, if you
  7. create an adventure that you are particularly proud of and wish to
  8. distribute publically, then you must pay the registration fee for
  9. AdventureMaker which is $30.
  10.  
  11. AdventureMaker is copyrighted, and I reserve all rights to it. Please do not
  12. remove this notice.  Thanks.
  13.  
  14.                   Patricia Smith
  15.                   Epiboly SoftWare                               CIS:   70655,425
  16.                   325 E. 79th Street, Apt. 13d              MacNet:  SmithPB
  17.                   New York, NY  10021                          Genie:  P-Smith
  18.  
  19.  
  20.  
  21. INTRODUCTION
  22.  
  23. AdventureMaker is an AdventureFile generator.  It enables you to write
  24. text adventures that can then be played with the desk accessory
  25. Adventure!   Writing an adventure can be a rather involved project.  You
  26. need to structure a plot of some kind. Then create a map of 'rooms', i.e. the
  27. locations in which your story takes place.   The rooms must then be tied
  28. together with objects and actions that direct the player through your story
  29. and ultimately to some kind of solution or victory.
  30.  
  31. Writing an adventure is not easy.  I have tried to make it "convenient" with
  32. AdventureMaker, but it's still not easy.  Before you begin I urge you to read
  33. these instructions through thoroughly.  Learning to use AdventureMaker is
  34. a little bit like learning a programming language.  You have to learn some
  35. of the commands and syntax of the language before you can do much of
  36. anything with it.
  37.  
  38. And what can you do with it?  My first AdventureFile  was a very
  39. traditional adventure.  I  like the old colossal cave, magic and mazes, so
  40. that's what I wrote.  But everyone is different, and this is your chance to
  41. write the adventure you always wanted to see.  Here are some ideas for
  42. possible adventures:
  43.  
  44.        -  A historical adventure.  This could be a learning experience for the
  45. player as well as being fun and exciting.  How about Napoleon's march into
  46. Russia from the perspective of one of the foot soldiers?  Or the Gold Rush
  47. of 1849?  How about great tales of exploration, Magellan's voyage around
  48. the world for example.
  49.  
  50.        - Adventures are a wonderful learning environment for children.  They
  51. learn reading, verbs and nouns, spelling, typing, and (hopefully) logical
  52. thinking.  Create an adventure for your children.  Perhaps you can use one
  53. of their favorite stories.  Or better yet, have the adventure be about your
  54. child!
  55.  
  56.         - Try writing a "simulation", like running a small country or an entire
  57. planet.  Or building a small company into a corporation.  How about a
  58. sailing simulation, cruising unknown small islands through coral reefs and
  59. hurricanes.
  60.  
  61.        - The adventure format lends itself nicely to murder mysteries.  You
  62. know you've always wanted to write one, so do it.
  63.  
  64.       - An adventure is always a series a small puzzles.  But why not try
  65. writing one big puzzle, a crossword puzzle for example.  What fun!  Each
  66. room could be a letter or word in the grid.
  67.  
  68.        - These are all suggestions for standard adventures.  But you can use
  69. the Adventure! desk accessory for other things as well.  Set up an
  70. interactive tour of your company.  Use the Adventure! DA for an interactive
  71. help file or tutorial.  Teachers could write history lessons in adventure
  72. format, or reading exercises or logic experiments.   If anyone wants to
  73. pursue this, I would be glad to modify some of the internal responses in
  74. the program to meet your needs.
  75.  
  76.  
  77. Let your creative juices flow.  Relax all your inhibitions.  Be sneaky,
  78. crafty, wily and obtuse.  Stick in all your favorite brain teasers.  Travel
  79. through your dreams.  Writing an adventure is the most exciting adventure
  80. of all.  Good Luck!
  81.  
  82.  
  83.  
  84. OVERVIEW:  HOW ADVENTURE! WORKS
  85.  
  86. Adventure! has a very simple structure. There are Rooms, within which
  87. there are Objects upon which Actions can be performed.  These three
  88. parameters -  Rooms, Objects, Actions - determine everything that
  89. happens and can happen in Adventure!  Each parameter has its own type of
  90. data record (RoomRecords, ObjectRecords, and ActionRecords) and all of
  91. the records are linked.  Rooms call objects, objects call actions, actions
  92. call objects, objects call rooms.  The hard part in writing an adventure is
  93. making sure that you have all the links right.
  94.  
  95. There is a fourth very important parameter in Adventure! and that is called
  96. a Block.  In order to minimize disk access while conserving memory,
  97. Adventure! groups sets of Rooms, Objects, and Actions together in Blocks.
  98. Each block contains up to 10 rooms, up to 15 Actions and up to 20 Objects.
  99. An entire block (all of the Room, Object, and Action data) is loaded into
  100. memory at one time.  As long as the player stays inside a block, there is no
  101. further disk access.  When the player leaves a block and travels to a new
  102. one, Adventure! goes to its AdventureFile and loads in an entirely new
  103. block, i.e. a new set of Rooms, Objects, and Actions.  Adventure! can have
  104. up to 10 blocks, which means your adventure can have 100 Rooms, 200
  105. objects and 150 actions.  You'll find that you can actually have quite a few
  106. more objects and actions than this because Adventure! allows six different
  107. 'names' for each object and for each action.  This represents an extremely
  108. large vocabulary, 3000 words in all.
  109.  
  110. This large of a vocabulary, along with the descriptions for each room and
  111. object, and the responses for each action, represents a _lot_ of data,
  112. roughly 350K on disk.  This is simply too much baggage for a desk
  113. accessory to carry around with it.  So AdventureMaker "crunches" or
  114. compresses the data when it creates an AdventureFile.  This compressed
  115. disk file is called a Crunch File.
  116.  
  117. While you are developing an adventure however,  you will be working
  118. exclusively with another type of disk file: a Block File.  Block Files are
  119. non-compressed data sets.  They are called Block Files because their
  120. internal structure is the same as the 'blocks' referred to above.  A single
  121. block in a Block File is always the same size, 35K, even if the block is
  122. completely empty.  Crunch Files, on the other hand, are the compressed
  123. final product that the Adventure! desk accessory can read.  The crunching
  124. process removes all empty records and blanks, so a sparse block, once
  125. crunched, is quite small, while a full block, in the limit, approaches 35K.
  126. Block Files can be revised  non-sequentially;  Crunch files cannot be
  127. revised once written.
  128.  
  129. Crunch Files are not just compressed block data.  They also include
  130. important header information, including, among other things, the title and
  131. author of the adventure, sounds for dying and winning, and a set of hints.
  132. You can modify all of this information in AdventureMaker.  When you are
  133. satisfied with it, save it to disk as a Header File.  Before you crunch a
  134. Block File, read in the header information you have prepared.  The header
  135. will be crunched first, then the rest of your crunched Block File appended
  136. to this.
  137.  
  138. A Crunch File _is_ an AdventureFile.  It is ready to be run by the
  139. Adventure! desk accessory.  All you need to do to run it is to name it
  140. "AdventureFile" and put it in your System Folder.  You could, alternatively,
  141. save the Crunch File directly to your System Folder as "AdventureFile"
  142. rather than renaming it and moving it there.  This is a little dangerous
  143. however, because you don't want to inadvertently overwrite an existing
  144. AdventureFile.
  145.  
  146.  
  147.  
  148. GETTING STARTED
  149.  
  150. When you first open AdventureMaker, you will be presented with
  151. AdventureMaker's main screen.  This is the control center of the program.
  152. From here, you can read  blocks from disk Block Files, you can create and
  153. modify Room, Object, and Action records, and you can modify header
  154. information.  Also, you can get a Summary of the current block that you are
  155. working on.  When you are finished, you can save the block to disk as a new
  156. Block File or you can write it to an existing Block File.  Finally, after you
  157. have created a set of blocks, you will want to crunch them to a Crunch
  158. File.
  159.  
  160. You do all your work in AdventureMaker on a block in memory.  This is
  161. referred to as the current memory block.  When you are satisfied with your
  162. changes and additions to the memory block, write the block to disk as a
  163. Block File or your work will be lost.  Note that Crunch Files  _cannot_  be
  164. read by AdventureMaker.  So if you save your work as a Crunch File only,
  165. you won't be able to retrieve it.
  166.  
  167. (There are cautionary Alerts all over the place in AdventureMaker.
  168. Reminding you to save your work is one of them.  If you get tired of all
  169. that nagging, you can turn the alerts off by checking the "No Alerts" check
  170. box.  Don't do this if you are at all forgetful.  I always leave it unchecked
  171. myself.)
  172.  
  173.  
  174. The "Input/Output Block Number":
  175.  
  176. The numbering of blocks in a Block or Crunch File is very important.  The
  177. numbers have two functions:  First, they indicate the actual physical order
  178. of blocks in the disk files.  Second, the block numbers are the tags by
  179. which Adventure! moves around and calls up new data.  When you first
  180. start AdventureMaker, you will be working on Block 1 (unless you have
  181. read in a block from a larger existing file).  When you have finished
  182. working on this block, you will want to write it to disk as a Block File.
  183. Type '1' in the Block Number box, then click the "Create New BlockFile"
  184. button.  Since this will be the first block in the new Block File, it _must_
  185. be numbered '1'.  Block Files must be built sequentially.  If you tried to
  186. write this block to a new file as Block 3 or Block 8, AdventureMaker
  187. wouldn't let you.
  188.  
  189. When you have finished with Block 1, you will want to start on Block 2 of
  190. your adventure.  Click the "New Empty Block" button to zero out all of the
  191. Room, Object and Action Records, then  fill in the records for the new
  192. block.  When you are done, you may either save the block to your existing
  193. Block File as block#2  (it will be, physically, the second block in the file)
  194. or you may want to save it by itself in its own Block File.  If you do this,
  195. be sure to give the file a distinctive name, like "Block 2".  However, since
  196. this block will be, physically, the first block in the file named "Block 2",
  197. you must save is as block #1.  Later, you can combine all of your separate
  198. single-block files into one big Block File with sequentially numbered
  199. blocks.  When you do this, your Block 2 will need to be, physically, the
  200. second block in the large combined file.   It will be saved to the big Block
  201. File at that time as block#2.
  202.  
  203. When you have finished with a series of blocks, you will want to "crunch"
  204. them, i.e. turn them into an AdventureFile, so that you can try out your new
  205. adventure with the  Adventure!  desk accessory.  Before you do this,
  206. however, you must write the header information for your Adventurefile.
  207.  
  208.  
  209. Header Information:
  210.  
  211. At the bottom of the main screen, you will see a set of buttons for
  212. modifying this header information (Default Header, Game Info, Hints, and
  213. Sounds).  AdventureMaker supplies you with default header material that
  214. you probably don't want to use.  Be sure to remember to modify it to fit the
  215. needs of your own creation.  However, if you have completely garbled the
  216. job and want to start over, you can click the "Default Header" button,
  217. which wipes out your changes and loads in the original default header.
  218.  
  219. It is particularly important that you fill in the "Game Info" record if
  220. nothing else, since this sets the title and opening display of your
  221. adventure.  The Hints dialog is self explanatory, but you may have
  222. difficulty with the Sounds dialog.  To fill this in, you will need a copy of
  223. Inside Macintosh.  The numbers are the frequency counts for notes and the
  224. note's duration. "Length" tells Adventure! how many notes are in a sound.
  225. "Pause" indicates how long of a separator to put between notes. To hear
  226. your sounds, click the "Play Snds"  buttons down in the lower left corner.
  227. A set of Sounds are included in the Default Header, so you don't need to
  228. fool with this if you don't want to.
  229.  
  230. After you have finished writing your Header, save it to disk as a Header
  231. File.  And before you crunch a Block File, be sure to first read in the Header
  232. information that you saved.
  233.  
  234.  
  235. Building a Crunch File:
  236.  
  237. There are two ways to create a Crunch File.  First, if you have been
  238. working with a single large Block File, you can convert it to a Crunch File
  239. very quickly using the Build button.  You will be asked for an input Block
  240. File and for the name of an output Crunch File.  The rest of the
  241. compression process will be done automatically.  Alternatively, if you
  242. have been keeping all of your blocks in separate single-block files, then
  243. you must read them in and then write them out to the Crunch File one by
  244. one.  Use the "Create New Crunch" button to begin with, then click the "Add
  245. Crunch" button for subsequent blocks.  Remember that the block numbering
  246. in the Crunch File must be sequential.
  247.  
  248. Whatever header information is in memory when you create a Crunch File
  249. or when you add to a Crunch File is written to the file.  If you don't want
  250. this to happen  (you are appending a block to an existing Crunch File and
  251. you don't want the header changed) then un-check the "Write Header" check
  252. box.  A header will always be written when you first create a Crunch File;
  253. un-checking this box only works for when you are adding blocks to an
  254. existing file.
  255.  
  256.  
  257. Revising Your Work:
  258.  
  259. You will _always_ find errors, inconsistencies, poor prose, etc. the first
  260. time through an adventure.  So it is very important that you be able to
  261. revise your blocks easily.  Suppose you want to make changes in Block 3 of
  262. your adventure.  If you have saved your blocks in one large Block File, then
  263. type a '3' in the Block Number box,  click the Read Block button and select
  264. your Block File in the subsequent file dialog.  Block 3 will be read from
  265. this file into memory.  Alternatively, if you have kept separate
  266. single-block files, type a '1' in the number box, click the Read Block button
  267. and then again select the appropriate file from the file dialog.  After you
  268. make whatever changes and modifications you wish to the block, you will
  269. need to save it again.  Type a '3' in the Block Number box, click the 'Add
  270. Block' button and save the block directly to your large combined BlockFile
  271. as block#3  (an Alert will ask you if you really do want to overwrite an
  272. existing block of that file).   Or you can save the block as block#1 to its
  273. own single-block file.  You cannot, however,  write the block back to an
  274. existing Crunch File as block#3.  The reason for this is that the block will
  275. have changed size, given any modification at all, so it will no longer fit in
  276. its original space in the Crunch File.  Crunch Files can be added to on the
  277. end, but they must be built anew if an existing block is modified.
  278.  
  279.  
  280. Option Key Reads and Writes:
  281.  
  282. There is a short cut for reading in block data and writing Block and Crunch
  283. Files.  After you first click the "Read Block" button, the name of your input
  284. Block File is kept in memory.  If you want to read another block from that
  285. file, you can avoid the standard file dialog by holding down the option key
  286. when you click "Read".   The same short cut works for writing Block Files
  287. and Crunch Files.  You must always go through the standard file dialog at
  288. least once, but again, the file names are kept in memory as designated
  289. output Block and/or Crunch Files.  Holding down the option key when you
  290. click "Add Block" will write the block to your output Block File.  Holding
  291. down the option key when you click "Add Crunch"  will crunch to block to
  292. your output Crunch File.
  293.  
  294.  
  295.  
  296. BUILDING AN ADVENTURE
  297.  
  298. RoomRecords
  299.  
  300. The simplest possible adventure would be just a set of rooms. Near the
  301. bottom of AdventureMaker's main dialog, it says "Which data set in the
  302. memory block do you want to work on?"   Click the Rooms button.  A blank
  303. RoomRecord will appear numbered '1'.  Give a Title to the room and fill in
  304. the description box.  When you have finished with the room, be sure to
  305. click 'Write Record' or your work will be lost.  (The record is written to
  306. the block in memory, not to a disk file.)  Now go to the 'Records' menu and
  307. choose 'New Empty Record'.  If you have just written room record #1,
  308. AdventureMaker will present you with a new empty record numbered 2.
  309. Fill in this record, write it and continue until you have a nice set of rooms.
  310. Don't go past 10 however (AdventureMaker won't let you) since only 10
  311. rooms are allowed in a block.  To create more than 10 rooms, you will need
  312. to save your current block to disk and start on an entirely new one.
  313.  
  314. (Note:  Rather than calling "New Empty Record" from the menu, you can just
  315. type in '2' in the Room Number box, change the Room Title, clear the old
  316. description and type in a new one, then write the new record.  As with
  317. blocks, room, object and action records must be built sequentially.  If you
  318. have only 3 rooms, you can't save the fourth room as room#8.)
  319.  
  320. The description of a room can only be 255 characters.  It is _very_ easy to
  321. run over this.  So as a precaution, after you have written a record, read it
  322. (click the read record button).  Make sure that your whole description
  323. actually got written.  If it was too long, you will find that part of it has
  324. been chopped off at the end.
  325.  
  326. If you would like to see a summary of your adventure so far, go back to the
  327. main dialog and click the Summary button.  A page will appear listing all
  328. of the rooms, objects and actions in the current block.  If you want to
  329. examine any of these, click directly on the name.  The record for that
  330. particular room, object or action will instantly appear.  (This only works
  331. for records that already exist.  If you click a blank on the Summary page,
  332. nothing will happen.)
  333.  
  334. Now that you have a set of rooms, you can indicate travel between them.
  335. In the Exit boxes in each room, indicate to which room travel in that
  336. direction will take the player.  For example, if 'N' leads to Room 2 then you
  337. would put '2' in the  Exit box under 'N'.  If travel takes the player out of the
  338. current Block into a new one, then you would indicate this by putting  a
  339. "Room##"  in the Exit box.  A Room## is the new Block number times 10
  340. plus the new Room number.  For example if you want to travel  to  Block 7
  341. Room 3, then the Room## would be 73  (7*10 + 3).  The parser assumes any
  342. exit number greater than 10 is a Room##.
  343.  
  344. At this point you might want to try your hand at a flag or two.  Put '-2' in
  345. the ExitFlag box directly underneath an Exit and fill in the Auxiliary text
  346. box in that room with something short but interesting like, "You would
  347. suffocate if you went in there."  When the player tries to go in that
  348. direction, he will be prevented from doing so with this response.
  349.  
  350. The player could wander around a long time in your adventure, if you put
  351. enough rooms in, but it would soon cease to be interesting.  He couldn't do
  352. anything except travel.  He couldn't examine objects, take them, drop them
  353. or do things with them.  The next step ,then, is including some objects.  In
  354. each RoomRecord in AdventureMaker you will see a row of 10 number boxes
  355. labeled 'Objects'.  Before you can fill in these boxes, you need to create
  356. some objects.
  357.  
  358.  
  359. ObjectRecords
  360.  
  361. Go back to the Main dialog and click Objects.  A blank ObjectRecord will
  362. appear numbered '1'.   Give at least one name to the object and fill in the
  363. main description box.  If the object is a plural, be sure to click the plural
  364. button.  Also, if you want the object to have a modifying adjective, fill
  365. this in as well.   AdventureMaker automatically assigns 5 points to each
  366. new object (and to each room).  You can change this if you wish by changing
  367. the number in the points box.
  368.  
  369. Below the Names boxes and above the Description box, you will see a whole
  370. set of empty number boxes.  This is the object's information matrix.
  371. Columns 1 and 2 contain Get and Show information.  If you want the object
  372. to be takeable ( the player can take it and put it in inventory), then put a
  373. '1' in row 1, column 1 under Get.  You will obviously want some objects to
  374. be takeable, like treasures, and others not, like houses.  If you want the
  375. object to show separately when the player enters a room (Adventure!
  376. displays the message, "There is a red ball here."), then put a '1' in row 1,
  377. column 2 under Show.
  378.  
  379. Row 1, column 3 through column10, is an object's Action List.  This is
  380. where you will put the action numbers of the actions that can be
  381. performed on, with or by the object.  At this point, you can't fill this in
  382. because you haven't created any actions yet.  We'll come back to this later.
  383.  
  384. Rows 2 and 3 of the object information matrix are for flags.  There are a
  385. great many different flags that you can use to put conditions or
  386. restrictions on actions, to kill people, to activate timers, etc.  Here's a
  387. simple flag you might want to try right off.  In row 2, column 1 under Get,
  388. put a '1'.  Now fill in the first auxiliary text box (below the main
  389. description) with a short message, such as "The box burns when you touch
  390. it."  From now on, until this flag is removed, if the player tries to take
  391. this object, this is the response he will get.  In row 2, column 2 under
  392. Show, put a '2' , then write a short message in the second auxiliary text
  393. box, such as "The box is empty".  Now, when the player examines the
  394. object, the description he will get will be the auxiliary 2 description.  For
  395. both of the row 2 Get and Show flags, if you put a '1', then the response
  396. will be auxiliary 1; if you put a '2', then the response will be auxiliary 2.
  397.  
  398. When you have finished with the object, be sure to click 'Write Record' or
  399. your work will be lost.  Now go to the 'Records' menu and choose 'New
  400. Empty Record'.  If you have just written object #1, AdventureMaker will
  401. present you with a new empty record numbered 2.  Fill in this record,
  402. write it and continue until you have a nice set of objects.  Don't go past 20
  403. however (AdventureMaker won't let you) since only 20 objects are allowed
  404. in a block.
  405.  
  406. When you have finished defining a set of objects, you might want to check
  407. your work by clicking the Summary button in the main dialog.
  408.  
  409. Now that you have a set of objects, you can put them in the rooms you
  410. created.  If you want object#1 to be in room#1, open up the RoomRecord of
  411. room#1 and put a '1' in the "Objects i in Room" list.  Put the numbers of
  412. any other objects that belong in that room in the list as well.  When a
  413. player enters this room, he will now be able to examine object#1 and any
  414. other object you included in the list.  And if you marked the object as
  415. takeable, then the player will be able to take the object as well.
  416.  
  417. You now have a pretty good adventure.  The player can move around, explore
  418. rooms, examine objects, take them and drop them.  But that's all the player
  419. can do.  He can't 'read' a book, or 'open' a box, or do anything that's
  420. particularly interesting.  The time has come to define some Actions.
  421.  
  422. Before you do this however, it will be instructive to actually try playing
  423. the adventure you have created so far.  First, save your work to disk as a
  424. Block File.  This is very important, since once the block is crunched, you
  425. won't be able to retrieve it.  After you have saved the block, crunch it.
  426. Exit AdventureMaker, rename the Crunch File "AdventureFile", put it in your
  427. System Folder, open up the Adventure!  desk accessory and see how it
  428. looks.  Travel through your different rooms, examine your objects, take
  429. some objects and drop them.  You really do have a miniature adventure at
  430. this point, and I hope you're a little bit proud of yourself.
  431.  
  432.  
  433.  
  434. ActionRecords
  435.  
  436. When you return to AdventureMaker, read in the block you have been
  437. working on from its Block File.   Click the Summary button to get oriented.
  438. You may at this point want to print the Summary page - you'll find this a
  439. great help as your adventure grows and becomes complex.  To print the
  440. page, press cmd-shift-4.
  441.  
  442. Now let's create some Actions.  Actions tie everything together in
  443. Adventure!  It is through actions, and the interaction of actions on objects
  444. and rooms, that descriptions change, flags are set or removed, timers are
  445. activated, exits open or disappear, players die or win.
  446.  
  447. In the main AdventureMaker dialog, click the Actions button.  A blank
  448. ActionRecord will appear numbered '1'.  Give at least one name to the
  449. action.  This particular action can act on, or be called by, up to three
  450. different objects.  As a result, you will see that the ActionRecord has
  451. three sets of number and text boxes, one set for each calling object.  The
  452. first number box in each set must contain the number of the object that is
  453. calling the action.  For example, suppose object 3 is a 'dog'.  And suppose
  454. the action you are working on, action 1, is 'pet'.  You want the player to be
  455. able to "pet the dog".  To do this, you would put a '3' in the object number
  456. box, since object 3, 'dog', calls the action, 'pet'.   Later, you must
  457. remember to return to the calling ObjectRecord, in this case object 3, and
  458. put a '1' in its Action List.  This identifies 'pet' (action 1) as an action that
  459. can be performed on 'dog'.
  460.  
  461. You now need to supply a response to the action.  In text box A1, type in a
  462. suitable response, up to 200 characters long.  Adventure! will always use
  463. the A1 text box response if an action actually takes place.  Text box A2 is
  464. reserved for 'failed' actions.   (When I refer to an action failing or taking
  465. place, I mean something very specific.  An action will set flags _only_ if
  466. it takes place.  A failed action will not set flags.)  For example, you might
  467. have a flag in your 'dog' ObjectRecord restricting 'pet'.  Perhaps the player
  468. needs to feed the dog first.  In this case, if the player tries to "pet the
  469. dog", he won't be able to.  The action will not take place and Adventure!
  470. will display the A2 response.  You would therefore want to type in a
  471. suitable negative response in the A2 box.  If an action will never 'fail', i.e.
  472. would never have a restriction on it, you can leave A2 blank.
  473.  
  474. To continue our example, you evidently want the player to be able to feed
  475. the dog.  'Feed' is a new action, separate and distinct from 'pet'.  Open up a
  476. new ActionRecord, action 2.  (Be sure to write action 1 first.)  Give it the
  477. name 'feed' and again put a '3'  in the object number box in the first row
  478. (since object 3 is again the calling object).  In your 'dog' ObjectRecord, add
  479. a '2' to the Action List.  Now 'dog' calls both 'pet' (action 1) and 'feed'
  480. (action  2).
  481.  
  482. Our 'pet'/'feed' example is a good place to begin exploring the power of
  483. flags.  Everything in Adventure! is driven by flags.  And this dynamic takes
  484. place primarily through actions.
  485.  
  486. I suggested above that there might be a restriction on "pet the dog".  How
  487. would we set this restriction?  The easiest way is to put a '-1' in row 2
  488. of the ObjectRecord directly under the 'pet' action number in the Action
  489. List.   A flag of '-1' simply means the action can't be done.   Remember that
  490. the Action List is row 1, column 3 through column 10.  Suppose that you
  491. put '1', for action 1 ('pet'),  in row 1, column 3.  Then to restrict this
  492. action, put a '-1' in row 2, column 3, directly under the '1'.  I  know this
  493. sounds a little complicated, but it's not.  Give it a try.
  494.  
  495. "Pet the dog" is now restricted and cannot be done.  When the player tries
  496. to do so, he will get the A2 text box response.  How can we remove this
  497. restriction?  If the player first feeds the dog, he should then be allowed to
  498. pet the dog.  So 'feeding' the dog should remove the restriction on 'pet'.  We
  499. do this with the room and object flags in the action record.  Open up
  500. ActionRecord 2 ('feed') and look at the first row of number boxes.  '3' is in
  501. the very first box, since this is the object# of the calling object.  Ignore
  502. the second number box (labeled Aux) for now.  There are seven more boxes
  503. in the row.  The first three number boxes, labeled Room Flags,  set room
  504. flags; the last four boxes, labeled Object Flags, set object flags.  I will
  505. refer to these boxes as the 'setflag' boxes from now on.  And that's what
  506. we want to do here.  We want to set the '-1' flag on 'pet the dog' to '0'.  In
  507. other words, if the player feeds the dog, then the restriction on 'pet' is
  508. removed and the player can then pet the dog.  In the first object setflag
  509. box (labeled 'obj) put the object number of the object that you want to
  510. affect ('3' in this case).  The flag that we want to change is in row 2,
  511. column 3 of this ObjectRecord, so put '2' in the "row" box, '3' in the "col"
  512. box.  Finally, in the box labeled "#", put a '0'.  What this series of numbers
  513. says is that the action "feed the dog" will set row 2, column 3 of object 3
  514. to 0.   This removes the restriction on "pet the dog".  From now on the
  515. player will be able to pet the dog as much as he wishes.
  516.  
  517. You might also want an action to open up a new exit to a room.  For
  518. example, perhaps you had a '-2' flag on the east exit from room 4, with an
  519. auxiliary room description of "The dog won't let you pass."  You want "feed
  520. the dog" to open up this exit.  To remove the restriction on the exit, fill in
  521. the room setflag boxes in the 'feed' ActionRecord.  Put the room# ('4') in
  522. the box labeled "rm", put a '3' in the "col" box ('east' is column 3 in a room's
  523. exit list), and put '0' in the box labeled '#'.  This sets the east exitflag in
  524. room 4 to '0'.  The player can now travel east from that room.
  525.  
  526. In many cases, you will want an action to set more than one object flag
  527. and/or room flag.  To set more flags, move down to the second row of
  528. setflag boxes in the ActionRecord.  Again, in the first box, fill in the
  529. number of the calling object  (you must always do this or the parser will
  530. simply skip that row of setflags).  Fill in the room and object setflag
  531. boxes as you wish.  You do _not_ want to put any text in the A1/A2 text
  532. boxes in this second set of setflags.  The parser will use the text you
  533. already supplied above.
  534.  
  535. You can now move down to the third row of setflags, heading it with the
  536. same object# if you wish.  Or you can use this third row to respond to an
  537. entirely new object.  Or you can leave it blank.  If this is a new object, you
  538. must again supply some text in the A1/A2 response boxes.  For example,
  539. suppose you want to be able to "feed the bears" in your adventure.  If
  540. 'bears' is object 4, then you would head the setflag row with '4'.  You would
  541. fill in the A1/A2 text boxes with appropriate responses.  You would fill in
  542. the setflag boxes giving the results of feeding the bears.  And in the
  543. "bears" ObjectRecord, you would put '2' (for action 2, 'feed') in the Action
  544. List.
  545.  
  546. The single most important thing to remember in writing ActionRecords is
  547. to make sure that all of your cross-references are correct.  In the
  548. ActionRecords, you must be sure to fill in the numbers of the calling
  549. objects.  In the ObjectRecords,  you must be sure to put the numbers of the
  550. called actions in the Action List.  Also, make sure that an object doesn't
  551. call two different actions with the same name.  Since six action names are
  552. allowed, this does happen sometimes.  The results are never what you
  553. want.
  554.  
  555. As you can see, actions are the driving force in Adventure!  Actions set
  556. flags.  And it is flags that give all the interest, the challenge and the
  557. frustration to a good adventure game.
  558.  
  559. So far, I have only mentioned a couple of different flags.  Adventure!
  560. recognizes a large number of flags, all having different consequences.   But
  561. before continuing, you should fill in a few action records, save your work
  562. as a Crunch File and try playing the adventure you have developed so far.
  563. See if your actions work.  Try setting a few of the simple flags already
  564. discussed.  If you feel comfortable with your results, then read on.  If not,
  565. don't venture further until you've gotten the basics under your belt.
  566.  
  567.  
  568.  
  569. ADVANCED ACTIONS
  570.  
  571. So far we have discussed the basic interplay of actions on objects and
  572. rooms.  Most ActionRecords that you write will behave in the way just
  573. discussed.  However, there are a number of "special" actions that are
  574. written differently and behave differently.  We will look at those here.
  575.  
  576. Special actions in Adventure! include:
  577.      1]   the object as a verb
  578.      2]   prepositional phrases
  579.      3]  'go' as an action
  580.      4]  'take' or 'drop' as actions
  581.      5]   the Time function
  582.      6]  the Moss function
  583.  
  584.  
  585. The Object as a Verb:
  586. Sometimes, you'll want to be able to respond to single-word sentences
  587. such as "jump" or "dig" or "search".  The parser will interpret these
  588. commands as objects (even though you and I know they are verbs).   So in
  589. rooms where such commands are likely, you should include objects with
  590. the relevant verb as one of its names.  For example, you might have an
  591. object with the name "swim".  In order to provide a response when the
  592. player types "swim", the object 'swim' must call an action, since only
  593. actions can give responses and set flags.  The way to deal with this is to
  594. name the called action "nil".  In other words, the parser interprets the
  595. player's instruction as "nil swim".  It will look through the Action List of
  596. the object "swim" until it encounters an action named "nil" and will then
  597. carry out the appropriate response given in the "nil" ActionRecord.
  598.  
  599. You might think this is a waste of object space, but you can cleverly do
  600. some doubling up here.  No player is going to "examine swim", or at least
  601. it's unlikely.  So "swim" can be but one of the six possible names for, say,
  602. "lake".   Then one of the actions called by "lake" (aka "swim")  would be the
  603. action "nil".  Thus, in one ObjectRecord, you can combined two separate
  604. objects:  "lake" and "swim".
  605.  
  606.  
  607. Prepositional Phrases:
  608. Suppose you want the player to be able to "throw the axe over the cliff".
  609. This is not your standard verb/noun sentence.  In fact, it has two nouns,
  610. 'axe' and 'cliff', separated by the preposition 'over'.  When the parser in
  611. Adventure! finds a prepositional phrase like this, it will interpret it as
  612. follows:  The first noun in the sentence, 'axe' is considered to be the
  613. primary object, i.e. it is the object that calls the action 'throw'.  'Throw'
  614. must therefore be an action in 'axe"s Action List.  The noun following the
  615. preposition is considered to be an 'auxiliary noun', so in this case, the
  616. auxiliary noun is 'cliff'.  The parser will then look at the ActionRecord for
  617. 'throw', will look for the row of setflags starting with the object number
  618. of 'axe' and will then check to see if there is a number in the Aux box of
  619. that row.  (The Aux box is the the second box in a setflag row.)  That
  620. number must be the object## for 'cliff'.  An object## is the original block
  621. number of the object times 20 plus the original object number of the
  622. object.  For example, suppose 'cliff' is object number 5 in block 7.  The the
  623. object## for cliff would be 145 ( = 20*7 + 5).  The parser will now
  624. examine all of the objects in the room and in the player's inventory to see
  625. if one of them has an object## of 145.  If one of them does, then the
  626. action will take place.  If the parser can't find object## 145, then the
  627. action will fail.
  628.  
  629. In a nutshell then, if you want an action to depend on a prepositional
  630. phrase, put the object## of the auxiliary object in the Aux box.  That's all
  631. there is to it.
  632.  
  633. By the way, Adventure! recognizes a preposition _only_ if it is in the
  634. Preposition List.  This is a list in the header information of a Crunch File.
  635. You can modify this list if you need to.  Click the "Prep List" button in the
  636. Game Info dialog.
  637.  
  638.  
  639. 'Go' is an Action:
  640. This is a very powerful action function and you will want to use it
  641. frequently.  Normally, when a player travels from room to room, the parser
  642. recognizes the player's travel instruction as being just that and goes
  643. straight to a 'travel' procedure.  No flags are set, and the only response a
  644. player gets is either the new room description, or a "you can't go there"
  645. type response.  However, sometimes you want the player's travel
  646. instruction to set flags and/or give a unique response.  To do this, you need
  647. to turn the normal travel instruction into a true action.
  648.  
  649. The way to do this is to have the travel instruction call an action.  But
  650. only objects can call actions, so you have to turn the travel instruction
  651. into an object.  When the parser looks at the ExitFlags in a room, if it finds
  652. an ExitFlag between 1 and 20, it will automatically assume that this is an
  653. object calling a 'go' action.  It will then look in the room's object list for
  654. an object _named_ that particular ExitFlag number.  For example, if the
  655. ExitFlag is '9', the parser will look for an object named '9'.  Note that any
  656. object could have '9' as one of its names -the parser doesn't care-  but to
  657. minimize confusion for your own sake, I suggest that you give object#9
  658. the name '9'.
  659.  
  660. Once the parser has found the appropriate object, it will search the
  661. object's Action List for an action named 'go'.  It will then execute the
  662. instructions in the 'go' ActionRecord, just as it would any called action.  If
  663. the action is non-restricted, the parser will set flags and then display the
  664. action's A1 text followed by More.  It will then complete the original
  665. travel instruction given by the player.  If the action is restricted (e.g.
  666. there is a flag on it in the ObjectRecord of the calling object) then the
  667. parser will display the action's A2 text, will not set flags, and will not
  668. complete the player's travel instruction.  If you leave the A1/A2 textboxes
  669. blank, the parser will set flags (or not) invisibly, using standard travel
  670. responses.
  671.  
  672. This does get a bit confusing, so here is an example.  Suppose you put '3' in
  673. the ExitFlag box.  Then of the six possible names for object#3, one would
  674. have to be '3'.  When you put '3' in the ExitFlag box, you are basically
  675. telling Adventure! to "go 3".  The parser looks for the object named '3', then
  676. looks at 3's Action List to find an action named 'go'.  It then does whatever
  677. 'go' tells it to, i.e. it sets flags, displays text, kills people or whatever,
  678. and then travels to the new room.  Remember, the action 'go' is subject to
  679. all the flags that any action would be, so if you have restrictions on the
  680. action, then neither will the action will take place, nor will Adventure!
  681. complete the original travel instruction.
  682.  
  683. A final note:  this function is highly error prone.  Not by the parser, but by
  684. you.   Make sure that the object is in the room, make sure that one of the
  685. object's names is the object# itself, and make sure that one of the actions
  686. that the object calls has the name of 'go'.
  687.  
  688.  
  689. 'Take' and 'Drop' as Actions:
  690. The verbs "take" and "drop" are built in to Adventure!  When the parser
  691. encounters these, it goes straight to the Inventory procedure.  If you want
  692. 'take' or 'drop' to behave like true actions, you need to tell the parser that
  693. this is the case.  It's very easy to do so.  Just put '-1' in an object's Get
  694. Box (row 1, column 1) if you want 'take' to be an action.  The parser will
  695. then search the object's Action List for an action named 'take'.  It the
  696. action is non-restricted, it will set flags, give the A1 response if
  697. provided, and then complete the original inventory instruction.  If 'take' is
  698. restricted, then the A2 response will be given, no flags will be set, and
  699. the inventory instruction will not carried out.  In both cases, if A1/A2 are
  700. left blank, standard Inventory responses will be used.
  701.  
  702. If you want 'drop' to be an action, put '-2' in the object's Get Box and be
  703. sure to include 'drop' as one of the actions in the object's Action LIst.
  704.  
  705. Finally, if you want both 'take' and 'drop' to be actions, put '-3' in the
  706. object's Get Box.  In this case, both  'take' and 'drop' should be in the
  707. object's Action List as two separate actions.
  708.  
  709.  
  710. The Time Function:
  711. Adventure! has two different timer functions: a short one and a long one.
  712. The short one is Time.  It is called with an ObjectRecord flag of '1' or '2'.
  713. The action that has been flagged in this way becomes a Time record and is
  714. treated by the parser in a special way.  The parser sets the flags indicated
  715. in the ActionRecord,  gives the action's A1 response and starts a timer
  716. ticking.  The flags set by the Time record are set _only_ for the duration
  717. of the timer.  When the timer expires, the room and object flags set by the
  718. Time record revert to their original values and the action's A2 text is
  719. displayed indicating the end of the Time function.
  720.  
  721. You can also set Exits (as opposed to ExitFlags) with the Time record, but
  722. these will not revert when the timer expires.  The change is permanent.
  723. This is an unfortunate exception, but was necessary due to size
  724. limitations.
  725.  
  726. The timer lasts only a few moves.  (You set the number of moves, the
  727. TimeCount, in the Game Info header dialog.)  Note that each character
  728. typed by the player is counted as a 'move', so 'n' is 1 move, while 'go north'
  729. is 8 moves.  The timer always expires if the player crosses a block
  730. boundary or saves a game.
  731.  
  732. Do not allow the player to do an action while the timer is activated that
  733. will set any of the flags affected by the Time record.  Otherwise, when the
  734. timer expires, the flags will revert to the values saved by the time
  735. function when it began.  This would then wipe out your player's actions.
  736.  
  737. A number of flags work off of the Time function.  (See the Flag list below.)
  738. You can specify that an action can or cannot take place if or if not Time.
  739. An example of a flagged Time function is the apples in "The Temple of
  740. Goth".  Eating the apples starts a Time function.  The player can enter the
  741. hole in the base of the tree only while Time is in effect.
  742.  
  743.  
  744. The Moss Function:
  745. The long term timer function in Adventure! is Moss.   Moss can invoke
  746. multiple interruptions, can survive a Save/Restore and can cross block
  747. boundaries.  It differs from the simple Time function in that it cannot
  748. restore flags to their original setting before Moss started.
  749.  
  750. Careful here!  Moss records are very different from standard
  751. ActionRecords.  They are never called directly by an object, but rather by
  752. an action.  Here's the way it works:  An object calling an action has a
  753. MossFlag set (row 3 = -8).  The parser executes the action, but while it's
  754. doing that, it looks at the called action to see if it has an Aux number
  755. between 1 and 15.  If it does, then the parser considers the action record
  756. with that number to be a MossRecord.  It reads the data of a MossRecord as
  757. follows:
  758.  
  759.        Names:  These are ignored.  But remember, you can't leave an action's
  760. name list completely blank (the record would not be written to the Crunch
  761. File if it were nameless).  You must fill in at least one name.  A good name
  762. in this case is 'moss'.  Then you know at a glance it's a MossRecord.
  763.  
  764.        Obj#'s:  These are ignored.  For your own reference you may want to
  765. include here the numbers of the calling objects or actions.
  766.  
  767.        Aux#'s:  Only the first is used.  This must give the number of Moss
  768. interruptions (which must equal the number of TimeChecks and the number
  769. of MossText messages).  It is very important that you set this number.  If
  770. you leave it blank, the Moss sequence will never take place.
  771.  
  772.        Room and Object SetFlags:  In the first row only, starting with the Rm
  773. box, fill in up to six TimeChecks. These are integers that indicate after
  774. how many moves a Moss interruption will occur.   You should include as
  775. many TimeChecks as the number indicated in the Aux box.
  776.  
  777.        TextBoxes:  Working _vertically_ (i.e. A1,A1,A1,then A2,A2,A2)  fill in
  778. the MossText messages that will be displayed for each Moss interruption.
  779. You should include as many MossText messages as TimeChecks.  Remember,
  780. the number of interruptions is indicated in the Aux box.
  781.  
  782. If you want something interesting to happen at the end of a Moss sequence,
  783. this must be indicated by the calling object when Moss is first invoked.
  784. You invoke Moss by putting a '-8' in row 3 under the relevant action.  If you
  785. want a player to die if he doesn't succeed in "curing" Moss, then put a '-9'
  786. in row 2.  If you want the player to be transported, put a Room## in row 2.
  787.  
  788. As with Time, there is a set of flags contingent on Moss.  See the Flag list
  789. below.  The most important of these is '-7' which will cure Moss (cancel
  790. the timing function) whenever it is encountered.
  791.  
  792. There are a number of Moss timer functions in "The Temple of Goth".  The
  793. original Moss function is, of course, the moss disease in Block 1.  Other
  794. examples of Moss are the creature in the fog , the processions of monks,
  795. and the destruction of the Temple at the end of the game.
  796.  
  797.  
  798.  
  799. ALLOWED TEXT SIZES
  800.  
  801. I've already mentioned some of these, but here's a list for reference:
  802.  
  803.                Objects:
  804.                   names                       10 characters
  805.                   adjective                  10 characters
  806.                   main description     255 characters
  807.                   aux1                          80 characters
  808.                   aux2                          80 characters
  809.                Rooms:
  810.                   name                         20 characters
  811.                   main description     255 characters
  812.                   auxiliary                   80 characters
  813.                Actions:
  814.                   names                      10 characters
  815.                   A1                          200 characters
  816.                   A2                          200 characters
  817.                Other:
  818.                   prepositions             10 characters
  819.                   Opening Text          255 characters
  820.                   Hints                      255 characters
  821.  
  822. The parser will always truncate a player's verbs, adjectives and nouns to
  823. 10 characters each.  This means you can too in your name lists.  For
  824. example, if you want use the action "concentrate", this will get truncated
  825. in the action record to "concentrat".  But that's all right.  When the player
  826. types "concentrate", his instruction will also be truncated and will thus
  827. match up with your action name.
  828.  
  829. Don't allow  _any_  name that will be displayed to be truncated, however.
  830. For example, if you have a "Fiddlefaddle" object that can be taken and put
  831. in inventory, when the Fiddlefaddle is dropped, it will appear in the room
  832. as a "FiddleFadd".  Oops.
  833.  
  834. Adventure! always uses the first name in an object's name list as the
  835. display name.  So be careful to make this a good descriptive name, 10 or
  836. fewer characters long.
  837.  
  838.  
  839.  
  840. FLAGS
  841.  
  842. Adventure! is driven by flags.  They are numerous, obscure and hard to
  843. remember.  In this section , I provide brief descriptions of all of the flags
  844. for the different record sets.   But rather than my trying to tell you, in
  845. detail, what each of these does, the best way to learn about them is by
  846. example and by trial and error.   Open up the example BlockFile supplied
  847. with AdventureMaker.  (This happens to be Block 1 of the "Temple of Goth".
  848. If you haven't solved "The Temple of Goth" yet, be forewarned that this
  849. BlockFile will reveal some solutions to puzzles in the game.)  Study how
  850. the flags are used there.  And try using some of these flags in your own
  851. adventure.  You'll soon get a feel for them.
  852.  
  853. In what follows, any number referred to with "##" is a combination giving
  854. both block number and room or object number.  Calculate these as follows:
  855.  
  856.                 Room##   =  (Block#)*(10)  +  Room#
  857.  
  858.                 Object## =  (Block#)*(20)  +  Object#
  859.  
  860.  
  861.  
  862. ROOM RECORDS
  863.  
  864. Room Exits:
  865.              0  <  num <= 10                     go to room#
  866.            10  <  num <= 110                   go to room##  (new block)
  867.  
  868. Room ExitFlags:
  869.             20  <  num  <=  220                need object ##
  870.                0 <  num  <=   20                'go' is an action called by object 'num'
  871.                      num  =  -1                    just can't go
  872.                      num  =  -2                    can't go with auxiliary description
  873.                      num  =  -3                    can't go if have items in inventory
  874.                      num  =  -4                    drop everything then go
  875.                      num  =  -7                    cure Moss then go
  876.        -220 <=  num  <  -20                  can't have the object##
  877.  
  878.  
  879.  
  880. OBJECT RECORDS
  881.  
  882. Get/Show Flags  (Columns 1 and 2):
  883.  
  884.                                                   Get                                   Show
  885.  
  886.               Row 1              0     can't get                         0    don't show
  887.                                       1     can get                           1    do show
  888.                                     -1     take is an action
  889.                                     -2     drop is an action
  890.                                     -3     both take and
  891.                                              drop are actions
  892.  
  893.               Row 2             0     main description            0    main description
  894.                                      1    aux 1 description            1    aux 1 description
  895.                                      2    aux 2 description            2    aux 2 description
  896.  
  897.               Row 3                      not used                           drop other object##
  898.  
  899.  
  900. The Row 3, Column 3 flag, "drop other object##" is very useful if you have
  901. two objects that you want to travel together in inventory.  For example, if
  902. you want water to travel only in a bucket, then when the player drops the
  903. bucket, the water should get dropped as well.  Indicate this by putting the
  904. object## of water in Row 3, Column 3  of the bucket's information matrix.
  905.  
  906.  
  907. The Action List  (Row 1, Column 3 to Column 10):
  908.  
  909. The Action List holds the action numbers of the actions that can be
  910. performed on or by the object.
  911.  
  912. If you want to allow a one-word verb command, eg 'jump', then the action
  913. called should have the name 'nil'.
  914.  
  915. If you want a travel instruction to set flags and/or give a text response,
  916. then the action called must have the name 'go' and the calling object must
  917. have its own object number as one of its names.  If there are no
  918. restrictions on the action, the travel instruction will then be carried as
  919. usual.
  920.  
  921. If you want 'take'  to set flags and/or give a text response, then the Get
  922. Flag of the ObjectRecord must be '-1' and the action called should have the
  923. name 'take'.  For 'drop', the Get Flag must be '-2' and the action name must
  924. be 'drop'.  If the Get Flag is '-3', then the parser will consider both 'take'
  925. and 'drop' to be true actions.   If there are no restrictions on the actions,
  926. both 'take' and 'drop' will also carry out their normal inventory functions.
  927.  
  928. One thing to remember is that an object's Action List is permanent.  You
  929. can change action numbers with action setflags, but these changes won't
  930. 'travel' across block boundaries or through a save/restore.  When a new
  931. block is read in from disk, the Action List will revert to its original form.
  932. An object's Row 2 and Row 3 flags, on the other hand, will travel nicely, as
  933. will any Get/Show flag.  Only the Action List itself is permanent.
  934.  
  935.  
  936. Row 2 and Row 3 Flags  (Column 3 to Column 10):
  937.  
  938. There is quite a bit of duplication here (you'll wish there were more),  but
  939. in general Row 2 flags govern room interactions and Row 3 flags govern
  940. object interactions.
  941.  
  942. It is very important to remember that Row 3 flags are checked  _before_
  943. Row 2 flags.  If there is a Row 3 restriction (say, -1) then the Row 2
  944. request will not be carried out (transport, for example).   On the other
  945. hand, if there is a Row 2 restriction ( -1 perhaps), then a Row 3 request
  946. (clear moss, say) _will_  be carried out, because this will happen before
  947. the Row 2 flag is examined by the parser.
  948.  
  949. Row 2 Flags:
  950.  
  951.                  num  =  111              random travel
  952.       10   <  num <=  110              travel to new Room##
  953.                  num  =  6                  remove the object
  954.                  num  =  5                  drop the object
  955.                  num  =  4                  take the auxiliary object
  956.                  num  =  3                  take the object
  957.                  num  =  2                  start timer /no sound
  958.                  num  =  1                  start timer /with sound
  959.                  num  =  -1                just can't do
  960.                  num  =  -7                clear moss
  961.                  num  =  -9                you're dead
  962.   -110  <=  num  <  -10              must be in Room## for action to take place.
  963.  
  964. Notes:
  965. The "remove object" flag makes an object in inventory disappear.  It is
  966. removed from inventory and from the game.  The "drop object" flag, on the
  967. otherhand, literally drops the object in the room.  The player can retrieve
  968. the object later.
  969.  
  970. The "take auxiliary object" flag works with a prepositional phrase.  It
  971. enables you to  "fill the bucket with water".  "Water" is an auxiliary object
  972. indicated in the "fill" action record.  If the action "fill" is flagged with 4
  973. in the "bucket" object record, then "water" will be put in inventory.
  974.  
  975.  
  976. Row 3 Flags:
  977.        20   <  num  <= 220              need the object## for action to take place.
  978.                   num  =  6                  remove the object  (it disappears)
  979.                   num  =  5                  drop the object
  980.                   num  =  4                  take the auxiliary object
  981.                   num  =  3                  take the object
  982.                   num  =  2                  start timer /no sound
  983.                   num  =  1                  start timer /with sound
  984.                   num  =  -1                just can't do
  985.                   num  =  -2                clear timer
  986.                   num  =  -3                can't do if not Time
  987.                   num  =  -4                can't do if Time
  988.                   num  =  -5                can't do if not Moss
  989.                   num  =  -6                can't do if Moss
  990.                   num  =  -7                clear Moss
  991.                   num  =  -8                Moss
  992.     -220 <=  num  <  -20              can't do if have the object##
  993.  
  994. Special Combinations:
  995.  
  996. If an action is flagged with '-9'  (death) in Row 2  and a Row 3 flag for that
  997. action is set, then player will die if the action _can't_ be done, but not
  998. otherwise.  For example, the Row 3 flag might be an object## indicating
  999. that a certain object is needed, a gas mask let's say, in order for the
  1000. flagged action to take place.  If the player doesn't have the gas mask and
  1001. he tries to do that action, he will die.  If he does have the gas mask, he
  1002. won't die, and the action will take place as requested
  1003.  
  1004. If a Row 2 'death' or 'travel'  flag is set when Moss is invoked then the
  1005. flagged result (death or travel) will take place at the last TimeCheck of
  1006. the Moss sequence, and only if  the Moss has not been 'cured'  by then.
  1007.  
  1008. By the way, try not to kill off your players with too much abandon.  A little
  1009. danger adds spice, but senseless, illogical, gratuitous deaths get very
  1010. frustrating for the player and add nothing to an adventure.
  1011.  
  1012.  
  1013.  
  1014. ACTION RECORDS
  1015.  
  1016. An action  _must_  have at least one name, otherwise the record will not
  1017. be written.
  1018.  
  1019. Special Action Names:
  1020.       'nil'                      - allows the calling object to be a stand-alone verb.
  1021.  
  1022.       'take'/ 'drop'        - allows standard inventory instructions to behave as
  1023.                                     true actions.  (This works only if flagged in an
  1024.                                     object's Get Box ).
  1025.  
  1026.       'go'                      - enables travel instructions to behave as true
  1027.                                     actions.  (If the 'N' exit is flagged with 12, then the
  1028.                                     parser interprets this as 'go 12'.  It looks for an
  1029.                                     object named '12', then searches that object's
  1030.                                     action list for an action named 'go'.)
  1031.  
  1032.  
  1033. SetFlags:
  1034.  
  1035. Each action can be called by up to three different objects.  For each calling
  1036. object, there is a row of setflag boxes, headed by the number of the calling
  1037. object:
  1038.  
  1039. Calling                          Room setflags                      Object setflags
  1040.   obj#      aux              Rm     col     set#            Obj     row      col     set#
  1041.    ˙           ˙                 ˙       ˙       ˙                 ˙       ˙          ˙       ˙
  1042.  
  1043.  
  1044. Aux Num:
  1045.            20 <  aux <= 220          Aux  gives the object## for use in a
  1046.                                               prepositional  phrase.  For  'put note in box',
  1047.                                               then aux would be the object## of  box.
  1048.  
  1049.              0 <  aux <= 15            If a MossFlag is set in the calling object then
  1050.                                               aux must contain the number of the action
  1051.                                               that is serving as the MossRecord.
  1052.  
  1053.  
  1054. Room SetFlags:
  1055. If the col# is negative, then Exits are set.  If the col# is positive then
  1056. ExitFlags are set:
  1057.  
  1058.                 col  <  0             sets Exits in Rm to set#
  1059.                 col  >  0             sets ExitFlags in Rm to set#
  1060.  
  1061. For example, if the room setflags  are [3, 4, -2] then this will set the West
  1062. Exitflag (col 4) to  '-2' in Room 3.  From now on, when the player tries to
  1063. go west in that room, he will get the auxiliary text in that room record.  If
  1064. the room setflags are [7, -2, 43], then this will set the South Exit (col 2)
  1065. in Room 7 to '43'.  From now on, when the player travels south out of Room
  1066. 7, he will end up in Block 4, Room 3.
  1067.  
  1068.  
  1069. Object SetFlags:
  1070. Changes the values of the obj's information matrix  to the set#.  For
  1071. example, if the object setflags are [19,  2,  2,  1] then this will set Row 2,
  1072. Column 2 of object 19 to '1'.  From now on, when the player 'examines'
  1073. object 19, he will get the description in object 19's aux1 textbox.
  1074.  
  1075.  
  1076. Text Boxes:
  1077.                 A1  =  text used if action is doable.
  1078.                 A2  =  text used if action can't be done.
  1079.  
  1080. Note that actions _cannot_ set the flags of objects or rooms in other
  1081. blocks!  This is not a problem for stationary objects, but can be a bother
  1082. for traveling objects (those in inventory).  The action parser will always
  1083. check to see that an object originates in a block before it will go ahead
  1084. and set any flags.  The reason for this is that when the player crosses a
  1085. block boundary, all non-resident actions and objects get renumbered.  Only
  1086. a Supreme Power, or a much larger Adventure! desk accessory, could keep
  1087. track of what action was setting what object after such a renumbering.
  1088.  
  1089. There is one exception to this.  If you specify with an object flag that an
  1090. action can only take place in a specific room, then the action parser will
  1091. go ahead and set flags, even though the object is no longer in its
  1092. originating block.  It is up to you to make sure that you know just what
  1093. flags are being set in this case.
  1094.  
  1095.  
  1096. Special Action Records:
  1097.  
  1098. Time Records:
  1099. If a TimeFlag  is set in the calling object, then Room and Object SetFlags
  1100. will be set _only_ for the duration of the timer.  Values then revert to the
  1101. original settings when the timer expires.  (An exception is if Exits are
  1102. changed - the change is permanent.)
  1103.  
  1104. TextBox A1 gives the text for timer activation.
  1105. TextBox A2 gives the text for end of timer.
  1106.  
  1107. The timer lasts only a few moves.  (You set the number of moves in the
  1108. Game Info header dialog.)  The timer always expires if the player crosses a
  1109. block boundary or saves a game.
  1110.  
  1111.  
  1112. Moss Records:
  1113. "Moss" is a long term timer function.  It can invoke multiple interruptions,
  1114. can survive a Save/Restore and can cross block boundaries.  It differs from
  1115. the simple "Time" function in that it cannot restore flags to their original
  1116. setting before Moss started.
  1117.  
  1118. If an object calling an action has a MossFlag set, then when the parser
  1119. executes the action it looks at the called action to see if it has an Aux
  1120. number between 0 and 15.  If it does, then the parser considers the action
  1121. record with that number to be a MossRecord.  It reads the data of a
  1122. MossRecord as follows:
  1123.  
  1124. -Names:  These are ignored, but you need to put something there or the
  1125. record will be skipped.  A good practice is to name a MossRecord "moss".
  1126.  
  1127. -Obj#'s:  These are ignored.  For your own reference you may want to
  1128. include here the numbers of the calling objects or actions.
  1129.  
  1130. -Aux's:  Only the first Aux number in the first row is used.  It is very
  1131. important that you fill this in.  It must give the number of Moss
  1132. interruptions (which must equal the number of TimeChecks and the number
  1133. of text responses).  If you leave this blank, the parser will assume there
  1134. are zero moss interruptions and nothing will happen.
  1135.  
  1136. -Room and Object SetFlags:  In the first row only, starting with the Rm
  1137. box, fill in up to six TimeChecks. These are integers that indicate after
  1138. how many moves a Moss interruption will occur.   The number of
  1139. TimeChecks must equal the number you put in the Aux box.
  1140.  
  1141. -TextBoxes:  Working _vertically_ (i.e. A1,A1,A1,then A2,A2,A2)  fill in the
  1142. MossText messages that will be displayed for each Moss interruption.  The
  1143. number of messages should be the same as the number of TimeChecks and
  1144. the number in the Aux box.
  1145.  
  1146.  
  1147. In the calling ObjectRecord, if a Row 2 'death' or 'travel'  flag is set when
  1148. Moss is invoked  then the flagged result (death or travel) will take place at
  1149. the last TimeCheck of the Moss sequence if  the Moss has not been 'cured'
  1150. by then.
  1151.  
  1152.  
  1153.  
  1154. YOU'RE ON YOUR OWN NOW.  WELL SORT OF.
  1155.  
  1156. I'm sure I've forgotten to mention many things.  But I do believe that once
  1157. you get started you will get a feel for how the flags and interactions work
  1158. and will only need to look at these instructions for reference.  By the way,
  1159. the Flag list, which is impossible to remember, is included in the "About..."
  1160. box under the Apple Menu in AdventureMaker.
  1161.  
  1162. If you have questions, and I'm sure you will, feel free to ask.  I can be
  1163. contacted on CompuServe, Genie and MacNet, or you can write to the
  1164. address given at the beginning of these instructions.    You don't need to
  1165. pay the registration fee just to get help.  I really do want to see some good
  1166. adventures created and will do what I can to get you started.
  1167.  
  1168. If you succeed if writing a super adventure and wish to distribute it
  1169. publically, I do ask that you pay the $30 registration fee before you do so.
  1170. Among other things, this will enable me to keep track of who is publishing
  1171. what with my program.  Also, registered AdventureMaker users will be
  1172. kept informed of revisions and updates to both Adventure! and
  1173. AdventureMaker.
  1174.  
  1175.                  Patricia Smith
  1176.                  Epiboly SoftWare                               CIS:   70655,425
  1177.                  325 E. 79th Street, Apt. 13d              MacNet:  SmithPB
  1178.                  New York, NY  10021                          Genie:  P-Smith
  1179.  
  1180.  
  1181. AdventureMaker, Version 1.0,  Copyright 1988,  portions Think
  1182. Technologies.
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207.  
  1208.  
  1209.  
  1210.